﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using Newtonsoft.Json;
using UFIDA.U8.BJSOFT.LF.MES.WEBAPI.DBHelp;
using UFIDA.U8.BJSOFT.LF.MES.WEBAPI.Models;

namespace UFIDA.U8.BJSOFT.LF.MES.WEBAPI.Method
{
	// Token: 0x02000013 RID: 19
	public class AddRD32
	{
		// Token: 0x0600006B RID: 107 RVA: 0x00005C70 File Offset: 0x00003E70
		public static string Insert(string filename, string jsons)
		{
			//LogException.WriteiLog(filename, "接收到的json:" + jsons, LogException.ilog, false);
			Result mr = new Result();
			List<ItemsItemR> lim = new List<ItemsItemR>();
			
			int row = 0;
			string res = "";
			bool flag = !string.IsNullOrEmpty(jsons);
			if (flag)
			{
				try
				{
					List<string> list = new List<string>();
					RD10 rd = JsonConvert.DeserializeObject<RD10>(jsons);
					string cCode = rd.cCode;
					int cou = rd.Items.Count;
					string cdlcode = "";
					bool flag2 = string.IsNullOrEmpty(cCode);
					if (flag2)
					{
						row = 1;
						res += "U8工单号不允许为空!检查cCode字段";
					}
					else
					{
						DataTable dtm = SQLHelper.GetDataTable(string.Concat(new string[]
						{
							"select CDLCODE,dlid from ",
							AddRD32.DBname,
							"..DispatchList where cdlcode='",
							cCode,
							"'"
						}));
						int ifex = Convert.ToInt32(dtm.Rows.Count);
						bool flag3 = ifex > 0;
						if (flag3)
						{
							cdlcode = dtm.Rows[0]["CDLCODE"].ToString();
							string dlid = dtm.Rows[0]["dlid"].ToString();
						}
						else
						{
							row = 1;
							res = res + "U8工单号[" + cCode + "]在U8系统中查不到发货单信息!";
						}
					}
					string dCode = rd.dCode;
					bool flag4 = string.IsNullOrEmpty(dCode);
					if (flag4)
					{
						row = 1;
						res += "外部系统单号不允许为空!检查dCode字段";
					}
					else
					{
						int ifex2 = Convert.ToInt32(SQLHelper.GetString(string.Concat(new string[]
						{
							"select COUNT(*) from ",
							AddRD32.DBname,
							"..rdrecord32 where cCode='",
							dCode,
							"'"
						})));
						bool flag5 = ifex2 > 0;
						if (flag5)
						{
							row = 1;
							res = string.Concat(new string[]
							{
								res,
								"外部系统单号[",
								dCode,
								"]在U8系统已存在",
								filename,
								"信息!"
							});
						}
					}
					string dDate = rd.dDate;
					bool flag6 = !string.IsNullOrEmpty(dDate);
					if (flag6)
					{
						bool flag7 = !PublicMet.IsDate(dDate);
						if (flag7)
						{
							row = 1;
							res += "日期格式不正确!例：[2024-11-12]";
						}
					}
					else
					{
						row = 1;
						res += "日期不允许为空！检查dDate字段";
					}
					string cRdCode = rd.cRdCode;
					bool flag8 = string.IsNullOrEmpty(cRdCode);
					if (flag8)
					{
						row = 1;
						res += "类型不允许为空!检查cRdCode字段";
					}
					else
					{
						int ifex3 = Convert.ToInt32(SQLHelper.GetString(string.Concat(new string[]
						{
							"select COUNT(*) from ",
							AddRD32.DBname,
							"..Rd_Style where cRdCode='",
							cRdCode,
							"'"
						})));
						bool flag9 = ifex3 == 0;
						if (flag9)
						{
							row = 1;
							res = res + "类型[" + cRdCode + "]在U8系统不存在!";
						}
					}
					string cWhCode = rd.cWhCode;
					bool flag10 = string.IsNullOrEmpty(cWhCode);
					if (flag10)
					{
						row = 1;
						res += "仓库编码不允许为空!检查cWhCode字段";
					}
					else
					{
						int ifex4 = Convert.ToInt32(SQLHelper.GetString(string.Concat(new string[]
						{
							"select COUNT(*) from ",
							AddRD32.DBname,
							"..Warehouse where cWhCode='",
							cWhCode,
							"'"
						})));
						bool flag11 = ifex4 == 0;
						if (flag11)
						{
							row = 1;
							res = res + "仓库编码[" + cWhCode + "]在U8系统不存在!";
						}
					}
					string cMaker = rd.cMaker;
					bool flag12 = string.IsNullOrEmpty(cMaker);
					if (flag12)
					{
						row = 1;
						res += "制单人不允许为空!检查cMaker字段";
					}
					else
					{
						string cMakers = PublicMet.CUSERNAME(cMaker);
						if (string.IsNullOrEmpty(cMakers))
						{
							row = 1;
							res += "未找到编码为[" + cMaker + "]的制单人员!";
						}
						else
						{
							cMaker = cMakers;
						}
					}
					string cHandler = rd.cHandler;
					bool flag13 = string.IsNullOrEmpty(cHandler);
					if (flag13)
					{
						row = 1;
						res += "审核人不允许为空!检查cHandler字段";
					}
					else
					{
						string cHandlers = PublicMet.CUSERNAME(cHandler);
						if (string.IsNullOrEmpty(cHandlers))
						{
							row = 1;
							res += "未找到编码为[" + cHandler + "]的审核人员!";
						}
						else
						{
							cHandler = cHandlers;
						}
					}
					string cDepCode = rd.cDepCode;
					bool flag14 = !string.IsNullOrEmpty(cDepCode);
					if (flag14)
					{
						int ifex5 = Convert.ToInt32(SQLHelper.GetString(string.Concat(new string[]
						{
							"select COUNT(*) from ",
							AddRD32.DBname,
							"..Department where cDepCode='",
							cDepCode,
							"'"
						})));
						bool flag15 = ifex5 == 0;
						if (flag15)
						{
							row = 1;
							res = res + "部门编码[" + cDepCode + "]在U8系统不存在!";
						}
					}
					else
					{
						row = 1;
						res = res + "部门编码不允许为空，检查cDepCode字段!";
					}
					string cMemo = rd.cMemo;
					string cAcc_Id = AddRD32.DBname.Substring(7, 3);
					int fidrd = 0;
					int cidrd = 0;
					string sql = " select iFatherId,iChildId from UFSystem..UA_Identity where cAcc_Id='" + cAcc_Id + "' and cVouchType='rd' ";
					DataTable dtidrd = SQLHelper.GetDataTable(sql);
					bool flag16 = dtidrd.Rows.Count > 0;
					if (flag16)
					{
						fidrd = Convert.ToInt32(dtidrd.Rows[0]["iFatherId"].ToString());
						cidrd = Convert.ToInt32(dtidrd.Rows[0]["iChildId"].ToString());
					}
					else
					{
						sql = " insert into UFSystem..UA_Identity (cAcc_Id,cVouchType,iFatherId,iChildId)  values('" + cAcc_Id + "','rd',0,0) ";
						SQLHelper.ExecuteSql(sql);
					}
					fidrd++;
					SQLHelper.ExecuteSql("update UFSystem..UA_Identity set iFatherId=iFatherId+1 where cAcc_Id='" + cAcc_Id + "' and cVouchType='rd' ");
					string ID32 = "1" + string.Format("{0:D9}", fidrd);
					string Code32 = dCode;
					string csysbarcode = "||st32|" + Code32;
					string VT_ID = "87";
					sql = string.Concat(new string[]
					{
						"insert into ",
						AddRD32.DBname,
						"..rdrecord32(id,brdflag,cvouchtype,cbustype,csource \r\n                            ,cbuscode,cwhcode,ddate,ccode,crdcode \r\n                            ,cdepcode,cpersoncode,cstcode,ccuscode,cdlcode \r\n                            ,cmaker,vt_id,iswfcontrolled,dnmaketime \r\n                            ,dnmodifytime,iprintcount,dVeriDate ,cHandler ,dnverifytime ,cMemo,\r\n                            cDefine10,cDefine12,cshipaddress,cinvoicecompany)\r\n                            values ('",
						ID32,
						"',N'0',N'32','普通销售',N'发货单',\r\n                            N'",
						cCode,
						"',N'",
						cWhCode,
						"',N'",
						dDate,
						"',N'",
						Code32,
						"',N'",
						cRdCode,
						"',\r\n                            '",
						cDepCode,
						"',NULL,N'01', NULL,N'",
						cdlcode,
						"',\r\n                            '",
						cMaker,
						"','",
						VT_ID,
						"',0,'",
						dDate,
						"', \r\n                            Null  ,0,'",
						dDate,
						"','",
						cHandler,
						"',getdate(),'",
						cMemo,
						"',\r\n                            NULL,NULL,NULL,NULL)"
					});
					LogException.WriteiLog(filename, "RD32主表新增语句:" + sql, LogException.ilog, false);
					list.Add(sql);
					
					for (int i = 0; i < cou; i++)
					{
						ItemsItemR mir = new ItemsItemR();
						string Autoid = rd.Items[i].Autoid;
						string isosid = string.Empty;
						string csocode = string.Empty;
						string siRown = string.Empty;
						bool flag17 = string.IsNullOrEmpty(Autoid);
						if (flag17)
						{
							row = 1;
							res = res + "第[" + (i + 1).ToString() + "]行U8工单明细唯一标识ID不允许为空!检查Autoid字段";
						}
						else
						{
							int ifex6 = Convert.ToInt32(SQLHelper.GetString(string.Concat(new string[]
							{
								"select count(*) from ",
								AddRD32.DBname,
								"..DispatchLists where idlsid='",
								Autoid,
								"'"
							})));
							bool flag18 = ifex6 == 0;
							if (flag18)
							{
								row = 1;
								res = string.Concat(new string[]
								{
									res,
									"第[",
									(i + 1).ToString(),
									"]行U8工单明细唯一ID[",
									Autoid,
									"]在U8系统不存在!"
								});
							}
							else
							{
								isosid = SQLHelper.GetString(string.Concat(new string[]
								{
									"select isosid from ",
									AddRD32.DBname,
									"..DispatchLists where idlsid='",
									Autoid,
									"' "
								}));
								siRown = SQLHelper.GetString(string.Concat(new string[]
								{
									"select iRowNo from ",
									AddRD32.DBname,
									"..DispatchLists where idlsid='",
									Autoid,
									"' "
								}));
								csocode = SQLHelper.GetString(string.Concat(new string[]
								{
									"select so.csocode from ",
									AddRD32.DBname,
									"..so_sodetails sd left join ",
									AddRD32.DBname,
									"..so_somain so on sd.id=so.id where iSOsID='",
									isosid,
									"'"
								}));
							}
						}
						string RowNo = rd.Items[i].RowNo;
						bool flag19 = string.IsNullOrEmpty(RowNo);
						if (flag19)
						{
							row = 1;
							res = res + "第[" + (i + 1).ToString() + "]行行号不允许为空!检查RowNo字段";
						}
						string cInvCode = rd.Items[i].cInvCode;
						bool flag20 = string.IsNullOrEmpty(cInvCode);
						if (flag20)
						{
							row = 1;
							res = res + "第[" + (i + 1).ToString() + "]行存货编码不允许为空!检查cInvCode字段";
						}
						else
						{
							int ifex7 = Convert.ToInt32(SQLHelper.GetString(string.Concat(new string[]
							{
								"select COUNT(*) from ",
								AddRD32.DBname,
								"..Inventory where cinvcode='",
								cInvCode,
								"'"
							})));
							bool flag21 = ifex7 == 0;
							if (flag21)
							{
								row = 1;
								res = string.Concat(new string[]
								{
									res,
									"第[",
									(i + 1).ToString(),
									"]行存货编码[",
									cInvCode,
									"]在U8系统不存在!"
								});
							}
						}
						string iQuantity = rd.Items[i].iQuantity;
						bool flag22 = string.IsNullOrEmpty(iQuantity);
						if (flag22)
						{
							row = 1;
							res = res + "第[" + (i + 1).ToString() + "]行数量不允许为空!检查iQuantity字段!";
						}
						else
						{
							bool flag23 = !PublicMet.IsNumberic(iQuantity);
							if (flag23)
							{
								row = 1;
								res = string.Concat(new string[]
								{
									res,
									"第[",
									(i + 1).ToString(),
									"]行数量[",
									iQuantity,
									"]非数字类型!"
								});
							}
						}
						string cBatch = rd.Items[i].cBatch;
						bool cba = Convert.ToBoolean(SQLHelper.GetString(string.Concat(new string[]
						{
							"select isnull(bInvBatch,0) from ",
							AddRD32.DBname,
							"..Inventory where cinvcode='",
							cInvCode,
							"'"
						})));
						if (cba)
						{
							bool flag25 = string.IsNullOrEmpty(cBatch);
							if (flag25)
							{
								row = 1;
								res = string.Concat(new string[]
								{
									res,
									"第[",
									(i + 1).ToString(),
									"]行存货[",
									cInvCode,
									"]进行批次管理,批次不允许为空,检查cBatch字段!"
								});
							}
						}
						string dMadeDate = rd.Items[i].dMadeDate;
						string cPosCode = rd.Items[i].cPosCode;
						bool flag26 = row == 0;
						if (flag26)
						{
							cidrd++;
							SQLHelper.ExecuteSql("update UFSystem..UA_Identity set iChildId=iChildId+1 where cAcc_Id='" + cAcc_Id + "' and cVouchType='rd' ");
							string autoid32 = "1" + string.Format("{0:D9}", cidrd);
							string cbsysbarcode = "||st32|" + Code32 + "|" + (i + 1).ToString();
							string sqlunit = string.Concat(new string[]
							{
								"select  cSTComUnitCode,isnull(iChangRate,NULL) iChangRate   from ",
								AddRD32.DBname,
								"..inventory i  left join ",
								AddRD32.DBname,
								"..ComputationUnit c  on i.cSTComUnitCode=c.cComunitCode  where cinvcode='",
								cInvCode,
								"'"
							});
							LogException.WriteiLog(filename, "产成品入库辅计量单位编码查询语句：" + sqlunit, LogException.ilog, false);
							DataTable dtiv = SQLHelper.GetDataTable(sqlunit);
							bool flag27 = dtiv.Rows.Count > 0;
							string cAssUnit;
							string iinvexchrate;
							if (flag27)
							{
								cAssUnit = "'" + dtiv.Rows[0]["cSTComUnitCode"].ToString() + "'";
								bool flag28 = !string.IsNullOrEmpty(dtiv.Rows[0]["iChangRate"].ToString());
								if (flag28)
								{
									iinvexchrate = (dtiv.Rows[0]["iChangRate"].ToString() ?? "");
								}
								else
								{
									iinvexchrate = "NULL";
								}
							}
							else
							{
								cAssUnit = "NULL";
								iinvexchrate = "NULL";
							}
							sql = string.Concat(new string[]
							{
								"insert into ",
								AddRD32.DBname,
								"..rdrecords32 (autoid,id,cinvcode,iNum ,iquantity,iFlag,iDLsID  ,iNQuantity,bLPUseFree,iRSRowNO,iOriTrackID,bCosting  ,bVMIUsed,cbdlcode,iExpiratDateCalcu,iorderdid  ,iordertype,iordercode,iorderseq,ipesodid,ipesotype  ,cpesocode,ipesoseq,isotype,irowno  ,cbsysbarcode,bIAcreatebill,bsaleoutcreatebill,bneedbill,iposflag,isodid,csocode,isoseq,cBatch,iinvexchrate ,cPosition,cAssUnit ,cItem_class,cItemCName,cItemCode,cName )  Values   ('",
								autoid32,
								"','",
								ID32,
								"','",
								cInvCode,
								"',null,'",
								iQuantity,
								"',0,'",
								Autoid,
								"'   ,'",
								iQuantity,
								"',0,0,0,1   ,0,'",
								cCode,
								"',0,",
								PublicMet.setvalue(2, isosid),
								"   ,1,",
								PublicMet.setvalue(2, csocode),
								",",
								PublicMet.setvalue(2, siRown),
								",null,1   ,1,null,0,'",
								(i + 1).ToString(),
								"'   ,null,0,0,0,0,",
								PublicMet.setvalue(2, isosid),
								",",
								PublicMet.setvalue(2, csocode),
								",  ",
								PublicMet.setvalue(2, siRown),
								",",
								PublicMet.setvalue(2, cBatch),
								",",
								iinvexchrate,
								",NULL,",
								cAssUnit,
								",NULL,NULL,NULL,NULL)"
							});
							list.Add(sql);
							sql = string.Concat(new string[]
							{
								"update ",
								AddRD32.DBname,
								"..SO_SODetails set iFHQuantity=isnull(iFHQuantity,0)+",
								iQuantity,
								" ,  foutquantity=isnull(foutquantity,0)+",
								iQuantity,
								"  where iSOsID='",
								isosid,
								"'"
							});
							list.Add(sql);
							list.Add(string.Concat(new string[]
							{
								"insert into ",
								AddRD32.DBname,
								"..IA_SA_UnAccountVouch(IDUN,IDSUN,cVouTypeUN,cBustypeUN )    values('",
								ID32,
								"','",
								autoid32,
								"','05','01') "
							}));
							mir.Autoid = Autoid;
							mir.U8RowNo = (i + 1).ToString();
							mir.U8ID = autoid32;
							lim.Add(mir);
						}
					}
					sql = string.Concat(new string[]
					{
						"exec ",
						AddRD32.DBname,
						"..pro_uptcurrentStock '",
						AddRD32.DBname,
						"','32','",
						ID32,
						"'"
					});
					list.Add(sql);
					bool flag29 = row == 0;
					if (flag29)
					{
						int count = SQLHelper.ExecuteSqlTran(list);
						bool flag30 = count > 0;
						if (flag30)
						{
							res += "出库成功";
							mr.U8Code = dCode;
							mr.Items = lim;
							LogException.WriteiLog(filename, "RD32销售出库成功[" + dCode + "]", LogException.ilog, false);
						}
						else
						{
							row = 1;
							res += "出库失败";
						}
					}
				}
				catch (Exception ex)
				{
					row = 1;
					LogException.WriteiLog(filename, "RD32异常:" + ex.Message, LogException.ilog, true);
					res = res + "失败:" + ex.Message;
				}
			}
			else
			{
				row = 1;
				res += "未传任何数据!";
			}
			bool flag31 = row == 1;
			if (flag31)
			{
				mr.Code = "500";
				mr.Msg = res;
			}
			else
			{
				mr.Code = "200";
				mr.Msg = res;
			}
			return JsonConvert.SerializeObject(mr);
		}

		// Token: 0x04000027 RID: 39
		public static string DBname = ConfigurationManager.AppSettings["U8DBNAME"].ToString();
	}
}
